2. 알고리즘과 프로그래밍

이 단원의 핵심

코드를 통째로 외우기보다 실행 결과를 예측할 수 있어야 한다. "왜 그렇게 출력되는가"를 자료형 중심으로 이해하는 것이 시험 대비의 핵심.

1. 자료형

겉보기에 같은 값처럼 보여도 컴퓨터는 자료형에 따라 다르게 처리함. '10'은 문자열, 10은 정수. 문자열끼리 더하면 이어 붙이고, 숫자끼리 더하면 계산함.

자료형 뜻 예시
int (정수) 소수점 없는 숫자 10, -3
float (실수) 소수점 있는 숫자 3.14, 0.5
str (문자열) 따옴표로 감싼 글자 '정보', '10'
bool (불) 참/거짓 True, False
list (리스트) 여러 값을 순서대로 저장 [80, 90, 70]
dict (딕셔너리) 키와 값의 쌍으로 저장 {"이름": "가온"}
용어 정리

  • 자료형 (Data Type): 값의 종류. 컴퓨터는 같은 모양의 값도 자료형에 따라 다르게 처리
  • 딕셔너리 (Dictionary): 키-값 쌍으로 저장하는 자료형. JSON 구조와 연결됨

2. 입력과 형 변환

input()으로 받은 값은 기본적으로 문자열. 사용자가 입력한 값이 숫자인지 글자인지 확정할 수 없기 때문. 숫자 계산을 하려면 int()나 float()로 변환해야 함.

a = "10"
b = "20"
print(a + b)            # 1020  (문자열 이어 붙이기)
print(int(a) + int(b))  # 30    (숫자 계산)
input() 값의 흐름:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

input("숫자: ")  →  "10"  (항상 문자열!)
                     │
            int() / float()로 변환
                     ↓
                    10    (숫자 → 계산 가능)
단골 출제 포인트

"10" + "20"은 "1020", int("10") + int("20")은 30. input() 결과는 문자열이라 바로 계산하면 의도와 다른 결과가 나온다.

3. 조건문과 반복문

개념 역할 예시
if 조건에 따라 실행할 코드를 나눔 평균이 80 이상이면 '상'
for 리스트 같은 묶음을 하나씩 반복 점수 목록을 하나씩 출력
while 조건이 참인 동안 반복 입력값이 0이 아닐 때 계속 실행
list 여러 값을 순서대로 저장 scores = [80, 90, 70]
scores = [80, 90, 70]
total = 0
for score in scores:
    total = total + score
print(total / len(scores))  # 80.0
# 조건문 예시: 평균으로 상/중/하 분류
if avg >= 80:
    level = "상"
elif avg >= 50:
    level = "중"
else:
    level = "하"

4. 파일 읽기

파일을 읽는 방법은 여러 가지이고, 같은 파일도 방식에 따라 결과 형태가 달라짐.

함수 역할 결과
open() 파일 열기 파일 객체
read() 전체 읽기 문자열 하나
readline() 한 줄 읽기 문자열 하나
readlines() 여러 줄을 리스트로 읽기 문자열 리스트
같은 파일, 다른 읽기 방식:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

파일 내용:
  가온,80,90
  나래,70,10

read()      → "가온,80,90\n나래,70,10\n"   (문자열 1개)
readline()  → "가온,80,90\n"                (첫 줄만)
readlines() → ["가온,80,90\n",              (리스트)
               "나래,70,10\n"]
구분 포인트

readline은 한 줄(문자열), readlines는 여러 줄(리스트). 's' 하나 차이로 결과 형태가 다름.

5. 문자열 처리: strip()과 split()

파일에서 읽은 한 줄은 보통 줄바꿈 문자 \n을 포함함.

함수 역할 결과
strip() 앞뒤 공백·줄바꿈 제거 정리된 문자열
split(",") 쉼표 기준으로 나누기 리스트
line = "가온,80,90,90\n"
clean = line.strip()         # "가온,80,90,90"
items = clean.split(",")     # ['가온', '80', '90', '90']
print(items)
CSV 한 줄 처리 흐름:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

"가온,80,90,90\n"   ← 원본 (줄바꿈 포함)
        │ strip()
        ↓
"가온,80,90,90"     ← 앞뒤 정리
        │ split(",")
        ↓
['가온','80','90','90']  ← 리스트
        │ int("80")
        ↓
80                  ← 숫자 변환 (계산 가능)
CSV의 정체

CSV는 결국 쉼표로 값이 구분된 텍스트 파일. strip().split(",")만 알면 한 줄을 행/열로 나눌 수 있다.


핵심 요약

2단원 알고리즘과 프로그래밍 요약:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

[자료형]
├─ int·float : 숫자 (계산)
├─ str       : 문자열 ('10'도 문자열!)
├─ bool      : 참/거짓
├─ list      : 순서 있는 묶음
└─ dict      : 키-값 쌍 (JSON과 연결)

[input()]
└─ 항상 문자열 → int()/float()로 변환해야 계산

[조건/반복]
├─ if/elif/else : 상황별 분기
├─ for          : 묶음 하나씩 반복
└─ while        : 조건 참인 동안 반복

[파일 읽기]
├─ read()      : 전체 (문자열 1개)
├─ readline()  : 한 줄 (문자열)
└─ readlines() : 여러 줄 (리스트)

[문자열 처리]
├─ strip()      : 앞뒤 공백·줄바꿈 제거
└─ split(",")   : 쉼표로 나눠 리스트로

결론:
→ "왜 그렇게 출력되는가"를 자료형으로 설명할 수 있으면 끝

관련 노트